/**
 * 
 */
package baduga.server.fasada;

import baduga.core.Core_JsonDataSchema;
import baduga.server.Controler;
import baduga.server.Network_API__Client_Thread;
import baduga.server.Player;
import baduga.server.Serwer;
import baduga.server.Table;

/**
 * @author Janek
 *
 */
public class F_NetworkBehavior {
	
	

	/**
	 * Sprawdza czy Login gracza jest nie zajęty
	 * 
	 */
	public Core_JsonDataSchema playerAuth(Core_JsonDataSchema data, final Network_API__Client_Thread wCliThr)
	{
		
		//Definicje
		Serwer serweraData; //Klasa Serwera
		boolean opStatus;	//Status Operacji
		Core_JsonDataSchema repData; //Dane odpowiedzi
		Player tmp; //Klasa gracza
		
		
		
		Object[][] rData;
		
		
		
		//Inicjalizacja
		repData = new Core_JsonDataSchema(0x01, new int[] {
			0x01
		}, 
		null, null);
		
		rData = Player.validate((String) data.getDataD1()[0]);
		
		

		
		//Walidacja Gracza
		if((boolean) rData[0][0])
		{
		
		
		
			//Inicjalizacja
			serweraData = Controler.getcSerwer();
			tmp = new Player((String) data.getDataD1()[0]);
			
			
		

			
			

			//Sprawdzenie czy nickname jest wolny & podłączenie gracza
			Object[] resOp = serweraData.addPlayer(tmp);
				
			
			if((boolean) resOp[0] == true)
			{

				
				/** Ustawienie argumentów */
				
				//Ustawia link do wątku
				tmp.setMyThread(wCliThr);
				
				
				
					
				//Ustawienie odpowiedzi
				repData.setDataD1( new Object[] {
					true,
					tmp.getPlayerId(),
					tmp.getFunds()
				});
				
				//Ustawienie odpowiedzi dla D2
				repData.setDataD2( new Object[][] {
					tmp.getFullStats()
				});
	
			}
			else
			{
				//Ustawienie komunikatu błędu
				repData.setDataD1( new Object[] {
					false,
					resOp[1]
				});
			}


		
		}
		else
		{
			repData.setDataD1( new Object[] {
				false
			});
			
			//Ustawienie odpowiedzi dla D2
			repData.setDataD2( new Object[][] {
				rData[1]
			});
			
		}
		
		return repData;
		
	}
	
	
	/**
	 * Operacja rozłączenia gracza
	 */
	public Core_JsonDataSchema playerDisconnect(Core_JsonDataSchema data)
	{
		//Definicje
		Player tmpPla;
		Serwer serweraData; //Klasa Serwera
		
		/** Warstwa Komunikacji*/
		Core_JsonDataSchema repData; //Dane odpowiedzi
		Object[] rData, tmpRet;
		
		
		//Inicjalizacja
		serweraData = Controler.getcSerwer();
		repData = new Core_JsonDataSchema(0x01, new int[] {
			0x02
		}, 
		null, null);
		
		
		tmpRet = serweraData.getPlayer((String) data.getDataD1()[0]);
		
		
		//SPR czy gracz istnieje.
		if((boolean) tmpRet[0])
		{

			
			//Inicjalizacja
			tmpPla = (Player) tmpRet[1];
			
			//Sprawdzamy status
			if(tmpPla.getStatusPlayer() > 0)
			{

				
				//Inicjalizacja
				rData = serweraData.getTable(  tmpPla.getTableId() );
				
				
				//SPR czy stół istnieje
				if((boolean) tmpRet[0])
				{
					//definicja
					Table tmpTab;
					
					//Inicjalizacja
					tmpTab = (Table) tmpRet[1];
					
					
					tmpRet = tmpTab.playerMigrContr(tmpPla, new int[] {
						1, tmpPla.getStatusPlayerForTable()
					});
					
					

					
					
				}
				
				

				
			}


			//Jeżeli nie było problemów
			if((boolean) tmpRet[0])
			{
				tmpRet = serweraData.removePlayer(tmpPla.getPlayerId());
				
				repData.setDataD1( new Object[] {
						true
					});

				
			}
			
		}
		
		
		
		if((boolean) tmpRet[0])
		{
			//Rozłączyło
			repData.setDataD1( new Object[] {
				false,
				tmpRet[1]
			});
		}

			
		
		
		
		return repData;
		
	}
	

}
